package com.zzl.springboot_mybatis_demo.configuration;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * description: 全局CROS过滤器配置
 * @author 朱正磊
 * @date 2019-12-08 22:19:24
 */
@SuppressWarnings("ALL")
@Configuration
public class CrosFilterConfig {

    /**
     * description: 配置CROS过滤器实现跨域
     * @author 朱正磊
     * @date 2019-12-08 22:27:38
     * @return 返回过滤器注册Bean
     */
    @Bean
    public FilterRegistrationBean crosFilterBean() {
        UrlBasedCorsConfigurationSource crosSource = new UrlBasedCorsConfigurationSource();
        CorsConfiguration crosConfig = new CorsConfiguration();
        // 是否允许用户发送、处理cookie，true表示允许
        crosConfig.setAllowCredentials(true);
        // 允许请求的跨域地址，*表示允许所有来源访问
        crosConfig.addAllowedOrigin("*");
        // 允许使用的字段，*表示允许所有请求头参数
        crosConfig.addAllowedHeader("*");
        // 允许请求的方法(GET、POST、DELETE、PUT、OPTIONS等)，*表示允许请求所有类型方法
        crosConfig.addAllowedMethod("*");
        // **表示对所有接口都有效
        crosSource.registerCorsConfiguration("/**", crosConfig);
        // 通过FilterRegistrationBean实例设置优先级可以生效
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(crosSource));
        // 优先级，越低越优先
        bean.setOrder(0);
        return bean;
    }

}
